package 螺旋矩阵II;

public class Matrix01 {
    public static void main(String[] args) {
        /*
        给你一个正整数 n ，生成一个包含 1 到 n^2 所有元素，且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。

         */
        generateMatrix(3);
        System.out.println();
        generateMatrix(4);
        System.out.println();
        generateMatrix(5);

    }


    public static int[][] generateMatrix(int n){
        // 不涉及算法，考察代码的掌握能力，《坚持了每条边左闭右开的原则》

        // 1.按照顺时针一个一个添加元素
        // 2.每顺时针一次，就会填满两行两列，所以我们只需要循环 n / 2 次
        // 3.注意行列添加时 for 循环的索引书写

        // 分析：时间复杂度： O(n^2)  空间复杂度 O(1)

        // 螺旋矩阵
        int[][] arr = new int[n][n];
        // 矩阵元素值
        int number = 0;
        for (int i = 0; i <= n / 2; i++) {
            // 添加上行(左闭右开)
            for(int j=i; j<n-i-1; j++)
                arr[i][j] = ++number;
            // 添加右列(左闭右开)
            for (int k=i; k<n-i-1; k++)
                arr[k][n-i-1] = ++number;
            // 添加下行(左闭右开)
            for (int p=n-i-1; p>i; p--)
                arr[n-i-1][p] = ++number;
            // 添加左列(左闭右开)
            for (int q=n-i-1; q>i; q--)
                arr[q][i] = ++number;
        }
        // 如果n为奇数的话，需要单独给矩阵最中间的位置赋值
        if ( n % 2 == 1 )
            arr[n/2][n/2] = ++number;
        return arr;
    }

    public static void PrintMy(int[][] arr){
        for (int i = 0; i < arr.length; i++) {
            for (int k = 0; k < arr[i].length; k++) {
                System.out.print(arr[i][k] + " ");
            }
            System.out.println();
        }
    }

}
